/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.basis.sys.datei;

import java.io.File;

import de.mnit.basis.daten.FilterText;
import de.mnit.basis.daten.konstant.sys.SYSTEM;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_Datei;
import de.mnit.basis.sys.Sys;

/**
 * @author Michael Nitsche
 */
public class DSLokal {

	public static S_Ordner root() {
		try {
			return new DSOrdner(File.listRoots()[0]); // "/"
		}
		catch(F_Sys_Datei e) {
			throw Fehler.sonstige.da_Unmoeglich();
		}
	}

	public static S_Ordner temp() {
		S_Ordner erg=null;
		try {
			erg=new DSOrdner(Sys.gPfadTemp()); // "/tmp"
		}
		catch(F_Sys_Datei e) {
			throw Fehler.sonstige.da_Unmoeglich();
		}
		return erg;
	}

	public static S_Ordner home() {
		try {
			return new DSOrdner(Sys.gPfadHome()); // "/home/mike"
		}
		catch(F_Sys_Datei e) {
			throw Fehler.sonstige.da_Unmoeglich();
		}
	}

	public static S_Ordner aktuell() {
		try {
			return new DSOrdner(Sys.gAktuellesVerz());
		}
		catch(F_Sys_Datei e) {
			throw Fehler.sonstige.da_Unmoeglich();
		}
	}

	public static S_Ordner gOrdnerAnwNitsche(String anwendung) throws F_Sys_Datei {
		Fehler.text.wenn_Null_o_Leer(anwendung);
		anwendung=FilterText.trimme(anwendung);
		anwendung=anwendung.replace(' ', '_');
		String basis=SYSTEM.gAktuell().istWindows() ? "Nitsche IT-Service" : "nitsche-itservice";
		S_Ordner anw=gOrdnerInAnwendungsdaten(basis);
		return anw.oF(anwendung);
	}

	public static S_Ordner gOrdnerInAnwendungsdaten(String ordner) throws F_Sys_Datei {
		Fehler.text.wenn_Null_o_Leer(ordner);
		S_Ordner anw=gOrdnerAnwendungsdaten();
		ordner=FilterText.trimme(ordner);
//		ordner=ordner.replace(' ', '_');
		if(SYSTEM.gAktuell().istLinux())
			return anw.oF("."+ordner);
		if(SYSTEM.gAktuell().istWindows())
			return anw.oF(ordner);
		if(SYSTEM.gAktuell().istMac())
			return anw.oF("."+ordner);
		throw Fehler.sonstige.da_ToDo("Anwendungsordner für dieses System noch nicht konfiguriert", SYSTEM.gAktuell());
	}

	//TODO gOrdnerAnwendungskonfig ... mit . oder eben nicht ... ... siehe gOrdnerAnwNitsche
	public static S_Ordner gOrdnerAnwendungsdaten() throws F_Sys_Datei {
		if(SYSTEM.gAktuell().istLinux())
			return DSLokal.home();
		if(SYSTEM.gAktuell().istWindows())
			return DSLokal.home().oF("Anwendungsdaten"); //TODO Auslesen! Oder z.B. %appdata% verwenden!
		if(SYSTEM.gAktuell().istMac())
			return DSLokal.home();
		throw Fehler.sonstige.da_ToDo("Anwendungsordner für dieses System noch nicht konfiguriert", SYSTEM.gAktuell());
	}

	public static S_DS_Element neu(File file) {
		try {
			return file.isDirectory() ? new DSOrdner(file) : new DSDatei(file);
		}
		catch(F_Sys_Datei e) {
			throw Fehler.sonstige.da_Unmoeglich();
		}
	}
}
